#include <iostream>
using namespace std;

/**
 * @brief
 * 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
 * 给你两个整数 x 和 y，计算并返回它们之间的汉明距离
 *
 */
class Solution
{
public:
    /**
     * @brief
     * 0 <= x, y <= 2^31 - 1
     * @param x
     * @param y
     * @return int
     */
    int hammingDistance(int x, int y)
    {
        int32_t num = x ^ y;
        int count = 0;
        while (num)
        {
            num &= num - 1;
            count++;
        }
        return count;
    }

    int hammingDistance_2(int x, int y)
    {
        int result = 0;
        while (x > 0 || y > 0)
        {
            result += (x % 2) ^ (y % 2);
            x >>= 1;
            y >>= 1;
        }
        return result;
    }

    int hammingDistance_3(int x, int y)
    {

        return __builtin_popcount(x ^ y);
    }
};

int main(int argc, char const *argv[])
{
    Solution s;
    cout << s.hammingDistance(1, 4) << endl;
    return 0;
}
